package cn.edu.hqu.cst.crj.servicesocket;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity {
    @BindView(R.id.main_content) TextView main_content;
    Handler handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);//注意位置 否则报错
        handler=new Handler(){
            @Override
            public  void handleMessage(Message msg){
                if (msg.what==0x1234){
                    main_content.setText(main_content.getText().toString()+msg.getData().getString("content"));
                   // main_content.setText("ces");
                }
            }
        };
        new Thread(new UdpServer(handler)).start();
    }
}

class UdpServer implements Runnable{
    private final  static int localPort=5000;
    byte[] buf=new byte[1024];
    Handler handler;
    DatagramSocket localDs=null;

    public UdpServer(Handler handler){
        this.handler=handler;
        try{
            localDs=new DatagramSocket(localPort);
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }

    // 启动一条子线程来读取服务器响应的数据
    public  void run(){
        while(true){
            // 不断读取Socket输入流中的内容
            try {
                // 每当读到来自服务器的数据之后，发送消息通知程序
                // 界面显示该数据
                DatagramPacket localDp=new DatagramPacket(buf,1024);
                localDs.receive(localDp);
                String rec=new String(localDp.getData(),localDp.getOffset(),localDp.getLength());
                Message msg=new Message();
                msg.what=0x1234;
                Bundle bundle=new Bundle();
                bundle.putString("content",rec);
                msg.setData(bundle);
                handler.sendMessage(msg);
            }catch (IOException e){
            }
        }
    }

}

